package datetime

import "time"

type DateTimeRange struct {
	Start          time.Time
	End            time.Time
	TimestampStart uint64
	TimestampEnd   uint64
	DateTimeString string
	DateString     string
}

// DayRange 根据给定时间生成当天的日期时间范围(00:00:00到次日00:00:00)。
//
// 参数:
//   - d: 输入时间
//
// 返回值:
//   - DateTimeRange: 包含完整时间范围信息的结构体
//
// 示例:
//
//	range := DayRange(time.Now()) // 返回今天00:00:00到明天00:00:00的范围
func DayRange(d time.Time) (dateSE DateTimeRange) {
	duration1Day, _ := time.ParseDuration("+24h")
	t := d.Add(duration1Day)

	dateSE.Start = time.Date(d.Year(), d.Month(), d.Day(), 0, 0, 0, 0, time.Local)
	dateSE.End = time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local)
	dateSE.TimestampStart = uint64(dateSE.Start.Unix())
	dateSE.TimestampEnd = uint64(dateSE.End.Unix())
	dateSE.DateTimeString = TimeFormat(d, TimeFormatYMDhms)
	dateSE.DateString = TimeFormat(d, TimeFormatYMD)

	return
}

func LastDayRange(d time.Time) DateTimeRange {
	return DayRange(LastDay(d))
}

// NextDayRange 根据给定时间生成后一天的日期时间范围(00:00:00到次日00:00:00)。
//
// 参数:
//   - d: 输入时间
//
// 返回值:
//   - DateTimeRange: 包含完整时间范围信息的结构体
//
// 示例:
//
//	range := NextDayRange(time.Now()) // 返回明天00:00:00到后天00:00:00的范围
func NextDayRange(d time.Time) DateTimeRange {
	return DayRange(NextDay(d))
}

// GetTodayRange 获取当前日期的日期时间范围(00:00:00到次日00:00:00)。
//
// 返回值:
//   - DateTimeRange: 包含完整时间范围信息的结构体
//
// 示例:
//
//	range := GetTodayRange() // 返回今天00:00:00到明天00:00:00的范围
func GetTodayRange() DateTimeRange {
	return DayRange(time.Now())
}

// GetYesterdayRange 获取昨天日期的日期时间范围(00:00:00到次日00:00:00)。
//
// 返回值:
//   - DateTimeRange: 包含完整时间范围信息的结构体
//
// 示例:
//
//	range := GetYesterdayRange() // 返回昨天00:00:00到今天00:00:00的范围
func GetYesterdayRange() DateTimeRange {
	return LastDayRange(time.Now())
}
